﻿using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace WebArchivosTelefonica.Jerarquias
{
    /// <summary>
    /// Clase que contiene la información de un estado de los documentos de un proyecto
    /// </summary>
    public class InfoEstadosDocumentosProyecto
    {
        #region CAMPOS
        /// <summary>
        /// Id del proyecto
        /// </summary>
        private readonly string _idProyecto;
        /// <summary>
        /// Id del documento asociado
        /// </summary>
        private readonly string _idDocumento;
        /// <summary>
        /// Id del estado de aprobacion
        /// </summary>
        private readonly string _idEstadoAprobado;
        /// <summary>
        /// Id del estado de rechazo
        /// </summary>
        private readonly string _idEstadoRechazado;
        /// <summary>
        /// Nombre del estado de aprobacion
        /// </summary>
        private readonly string _nombreEstadoAprobado;
        /// <summary>
        /// Nombre del estado de rechazo
        /// </summary>
        private readonly string _nombreEstadoRechazado;
        /// <summary>
        /// Consecutivo de aprobacion
        /// </summary>
        private int _consecutivoAprobado;
        /// <summary>
        /// Consecutivo de rechazo
        /// </summary>
        private int _consecutivoRechazado;
        /// <summary>
        /// Indica si tiene el documento tiene estos estados seleccionados
        /// </summary>
        private bool _seleccionado;



        /// <summary>
        /// Administrador
        /// </summary>
        private IAdministrador _admin;
        #endregion

        #region CONSTRUCTOR
        /// <summary>
        /// Constructor de la clase por parametros
        /// </summary>
        /// <param name="idProyecto">Id del proyecto</param>
        /// <param name="idEstadoAprobado">Id del estado</param>
        /// <param name="nombreEstadoAprobado">Nombre del estado</param>
        /// <param name="consecutivoAprobado">Consecutivo</param>
        /// <param name="idEstadoRechazado">Id del estado</param>
        /// <param name="nombreEstadoRechazado">Nombre del estado</param>
        /// <param name="consecutivoRechazado">Consecutivo</param>
        /// <param name="admin">Administrador</param>
        public InfoEstadosDocumentosProyecto(string idProyecto,
            string idEstadoAprobado, string nombreEstadoAprobado, int consecutivoAprobado,
            string idEstadoRechazado, string nombreEstadoRechazado, int consecutivoRechazado,
            IAdministrador admin)
        {
            _idProyecto = idProyecto;
            //Aprobados
            _idEstadoAprobado = idEstadoAprobado;
            _nombreEstadoAprobado = nombreEstadoAprobado;
            _consecutivoAprobado = consecutivoAprobado;
            //Rechazados
            _idEstadoRechazado = idEstadoRechazado;
            _nombreEstadoRechazado = nombreEstadoRechazado;
            _consecutivoRechazado = consecutivoRechazado;
            _admin = admin;
        }

        /// <summary>
        /// Constructor de la clase por parametros
        /// </summary>
        /// <param name="idProyecto">Id del proyecto</param>
        /// <param name="idDocumento">Id del documento</param>
        /// <param name="idEstadoAprobado">Id del estado</param>
        /// <param name="nombreEstadoAprobado">Nombre del estado</param>
        /// <param name="consecutivoAprobado">Consecutivo</param>
        /// <param name="idEstadoRechazado">Id del estado</param>
        /// <param name="nombreEstadoRechazado">Nombre del estado</param>
        /// <param name="consecutivoRechazado">Consecutivo</param>
        /// <param name="seleccionado">Indica si esta seleccionado o no el estado para el documento</param>
        /// <param name="admin">Administrador</param>
        public InfoEstadosDocumentosProyecto(string idProyecto, string idDocumento,
            string idEstadoAprobado, string nombreEstadoAprobado, int consecutivoAprobado,
            string idEstadoRechazado, string nombreEstadoRechazado, int consecutivoRechazado,
            bool seleccionado,
            IAdministrador admin):
            this(idProyecto,
            idEstadoAprobado,nombreEstadoAprobado,consecutivoAprobado,
            idEstadoRechazado,nombreEstadoRechazado,consecutivoRechazado,
            admin)
           
        {
            _idDocumento = idDocumento;
            _seleccionado = seleccionado;
        }


        #endregion

        #region PROPIEDADES

        /// <summary>
        /// Propiedad para ver el boton de subir de orden
        /// </summary>
        public bool VerBotonUp
        {
            get
            {
                if (_consecutivoAprobado <= 3)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
        }
        /// <summary>
        /// Propiedad para ver el boton de bajar de orden
        /// </summary>
        public bool VerBotonDown
        {
            get
            {
                return _admin.VisivilidadBotonDownEstadoDocumento(_idProyecto, _idEstadoAprobado);
            }
        }

        /// <summary>
        /// Id del proyecto
        /// </summary>
        public string IdProyecto
        {
            get
            {
                return _idProyecto;
            }
        }
        /// <summary>
        /// Identificador del documento 
        /// </summary>
        public string IdDocumento
        {
            get
            {
                return _idDocumento;
            }
        }
        /// <summary>
        /// Id del estado
        /// </summary>
        public string IdEstadoAprobado
        {
            get
            {
                return _idEstadoAprobado;
            }
        }
        /// <summary>
        /// Nombre del estado
        /// </summary>
        public string NombreEstadoAprobado
        {
            get
            {
                return _nombreEstadoAprobado;
            }
        }
        /// <summary>
        /// Consecutivo
        /// </summary>
        public int ConsecutivoAprobado
        {
            get
            {
                return _consecutivoAprobado;
            }
            set
            {
                _consecutivoAprobado = value;
            }
        }

        /// <summary>
        /// Id del estado
        /// </summary>
        public string IdEstadoRechazado
        {
            get
            {
                return _idEstadoRechazado;
            }
        }
        /// <summary>
        /// Nombre del estado
        /// </summary>
        public string NombreEstadoRechazado
        {
            get
            {
                return _nombreEstadoRechazado;
            }
        }
        /// <summary>
        /// Consecutivo
        /// </summary>
        public int ConsecutivoRechazado
        {
            get
            {
                return _consecutivoRechazado;
            }
            set
            {
                _consecutivoAprobado = value;
            }
        }
        

        /// <summary>
        /// Indica si tiene el documento tiene estos estados seleccionados
        /// </summary>
        public bool Seleccionado
        {
            get
            {
                return _seleccionado;
            }
            set
            {
                _seleccionado = value;
                _admin.CambiarPosibleEstadoDocumento(IdProyecto, IdDocumento, IdEstadoAprobado, IdEstadoRechazado, _seleccionado);
            }
        }

        #endregion
    }
}
